package com.sxj.corejava.code09_集合.Map集合;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author 石小俊
 * @date 2024年05月09日 18:01
 * 控制台输入一个字符串,统计字符串中每个字符出现的次数,保存到HashMap集合中
 * 至少使用两种不同的方式实现
 */
public class Test03_练习 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个字符串:");
        String s = sc.next();
//        HashMap map = test01(s);
        HashMap map = test02(s);
        System.out.println(map);
    }

    public static HashMap<Character, Integer> test01(String s) {
        HashMap<Character, Integer> map = new HashMap<>();
        // 遍历字符串中每一个字符
        for (int i = 0; i < s.length(); i++) {
            // 取出当前迭代的字符
            char c = s.charAt(i);
            // 判断该字符是否已经存在预支对应的key了
//            if (map.containsKey(c)) {
//                // 如果存在,取出当前的value
//                int count = map.get(c);
//                // 在其原有值的基础上+1
//                map.put(c, count + 1);
//            } else {
//                // 如果不存在,保存一条新的数据
//                map.put(c, 1);
//            }

            // 简写方式
            map.put(c, map.containsKey(c) ? map.get(c) + 1 : 1);
        }
        return map;
    }

    public static HashMap<Character, Integer> test02(String s) {
        HashMap<Character, Integer> map = new HashMap<>();
        while (!s.isEmpty()) {
            // 取出字符串中的第一个字符
            char c = s.charAt(0);
            // 将字符串中所有与第一个字符相同的字符全部替换为空
            String s2 = s.replace(c + "", "");
            // 此时字符串长度减少了多少,即表示对应字符出现了几次
            map.put(c, s.length() - s2.length());
            s = s2;
        }
        return map;
    }

}
